package com.gitee.jisong;

import org.apache.commons.lang3.math.NumberUtils;

import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Map;

/**
 * @author wb.sunjisong18 2020-06-09
 */
public class GSONArray extends ArrayList {

    public GSONArray(int initialCapacity) {
        super(initialCapacity);
    }

    public GSONArray() {
        super();
    }

    public GSONArray(Collection c) {
        super(c);
    }

    public String getString(int index, String defaultValue){
        Object o = get(index);
        if(null == o) return defaultValue;
        return o.toString();
    }

    public byte getByte(int index, byte defaultValue){
        return NumberUtils.toByte(getString(index, null),defaultValue);
    }

    public short getShort(int index, short defaultValue){
        return NumberUtils.toShort(getString(index, null),defaultValue);
    }

    public int getInt(int index , int defaultValue){
        return NumberUtils.toInt(getString(index, null),defaultValue);
    }
    public long getLong(int index , long defaultValue){
        return NumberUtils.toLong(getString(index, null),defaultValue);
    }

    public float getFloat(int index, float defaultValue){
        return NumberUtils.toFloat(getString(index, null),defaultValue);
    }

    public double getDouble(int index, double defaultValue){
        return NumberUtils.toDouble(getString(index, null),defaultValue);
    }
    public BigDecimal getBigDecimal(int index){
        return NumberUtils.toScaledBigDecimal(getString(index, null));
    }

    public BigDecimal getBigDecimal(int index, int scale , RoundingMode RountMode){
        return NumberUtils.toScaledBigDecimal(getString(index, null),scale,RountMode);
    }

    public GSONMap getGSONMap(int index,GSONMap defaultValue){
        Object o = get(index);
        if(null == o) return defaultValue;
        if(o instanceof Map){
            return new GSONMap((Map)o);
        }
        if(o instanceof String){
            return GSON.parseMap((String) o);
        }
        return defaultValue;
    }

    public GSONArray getGSONArray(int index, GSONArray defaultValue){
        Object o = get(index);
        if(null == o) return defaultValue;
        if(o instanceof Collection){
            return new GSONArray((Collection) o);
        }
        if(o instanceof String){
            return GSON.parseArray((String) o);
        }
        return defaultValue;
    }
}
